
/*
*Released on 28th June 2008.
*Any violations can be reported at paritosh@wikiocean.net
*What is treated as violations can be found at www.wikiocean.net/ppl1-voilations*
******************************************************************************
* The contents of this file are subject to POOL Public License 1.0 and later.
* POOL Public License is based on Affero GPL v3 and additional conditions.
* ("License"); You may not use this file except in compliance with the License
* You may obtain a copy of the Affero GPL v3 License at http://www.gnu.org/licenses/agpl.html
* You may obtain a copy of the POOL Public License 1.0 or later at www.wikiocean.net/license/ppl.html
* Software distributed under POOL Public License 1.0 is distributed on an "AS IS" basis,
* WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License for
* the specific language governing rights and limitations under the License.
* The Initial Developer of the Original Code is Paritosh Pungaliya (C) 2008. All Rights Reserved.
******************************************************************************
* Objective of the additional terms (license)
* 1) Is to extend the software freedom to freedom to work.
* 2) To ensure that knowledge is free from monopoly of agencies.
* 3) To avoid a situation where big corporate or investor can buy out free software groups and companies and then start milking the communities built around it.
* (this trend can be seen how the freedom is curtailed in companies that get Venture Capital funding.)
******************************************************************************
*/

package  logger;

import java.io.*;
import java.util.*;

import dbmanager.DBManager;
import utility.*;

public class Logger 
{
	String LogDir =Input.LogDir;
	String loggerpath;
	Date datetime;
	FileWriter fwrite;
	public StringBuffer Logger = new StringBuffer();
	PoolLogger pl;
	
	public Logger() 
	{	
		datetime= new Date();
		Logger.append("\nMessage Recieved at : "+datetime.toString()+"\n");
		
		// logger
		pl = (PoolLogger) PoolLogger.getLogger(this.getClass().getName());
	}
	
	public void addLog()
	{
		try
		{
			File dir = new File(LogDir);
			if(dir.exists())
				dir.mkdirs();
			
			MyDate date = new MyDate();
			// create log file with current date
			loggerpath = LogDir+date.getDate()+Input.FILRFORMAT;
			File logfile = new File(loggerpath);
			
			System.out.println("logger::Logger:: addLog():: loggerPath is :"+loggerpath);
			pl.info("logger::Logger:: addLog():: loggerPath is :"+loggerpath);
			pl.debug("logger::Logger:: addLog():: loggerPath is :"+loggerpath);
			pl.warn("logger::Logger:: addLog():: loggerPath is :"+loggerpath);
			pl.fatal("logger::Logger:: addLog():: loggerPath is :"+loggerpath);
			pl.error("logger::Logger:: addLog():: loggerPath is :"+loggerpath);
			pl.trace("logger::Logger:: addLog():: loggerPath is :"+loggerpath);
			
			if(logfile.exists())
			{
				System.out.println("logger::Logger:: addLog()::Logfile already exists");
				pl.info("logger::Logger:: addLog()::Logfile already exists");
				pl.debug("logger::Logger:: addLog()::Logfile already exists");
				pl.warn("logger::Logger:: addLog()::Logfile already exists");
				pl.fatal("logger::Logger:: addLog()::Logfile already exists");
				pl.error("logger::Logger:: addLog()::Logfile already exists");
				pl.trace("logger::Logger:: addLog()::Logfile already exists");
				
				fwrite = new FileWriter(logfile,true);
				synchronized (this) 
				{
					datetime = new Date();
					//processLogger.append("\nMessage Sent at : "+datetime.toString()+"\n*****\n");
					fwrite.write(Logger.toString());
					fwrite.close();
				}
			}
			else
			{
				if(logfile.createNewFile())
				{
					System.out.println("logger::Logger:: addLog()::Logfile created");
					pl.info("logger::Logger:: addLog()::Logfile created");
					pl.debug("logger::Logger:: addLog()::Logfile created");
					pl.warn("logger::Logger:: addLog()::Logfile created");
					pl.fatal("logger::Logger:: addLog()::Logfile created");
					pl.error("logger::Logger:: addLog()::Logfile created");
					pl.trace("logger::Logger:: addLog()::Logfile created");
					
					fwrite = new FileWriter(logfile,true);
					synchronized (this) 
					{
						datetime = new Date();
						//processLogger.append("\nMessage Sent at : "+datetime.toString()+"\n*****\n");
						fwrite.write(Logger.toString());
						fwrite.close();
					}
				}
				else
				{
					System.out.println("logger::Logger:: addLog():: Sorry, File not created");
					pl.info("logger::Logger:: addLog():: Sorry, File not created");
					pl.debug("logger::Logger:: addLog():: Sorry, File not created");
					pl.warn("logger::Logger:: addLog():: Sorry, File not created");
					pl.fatal("logger::Logger:: addLog():: Sorry, File not created");
					pl.error("logger::Logger:: addLog():: Sorry, File not created");
					pl.trace("logger::Logger:: addLog():: Sorry, File not created");
				}
			}
		}
		catch(Exception e)
		{
			File dir = new File(LogDir);
			dir.mkdirs();
			System.out.println("logger::Logger:: addLog()::error ");
			pl.info("logger::Logger:: addLog()::error ");
			pl.debug("logger::Logger:: addLog()::error ");
			pl.warn("logger::Logger:: addLog()::error ");
			pl.fatal("logger::Logger:: addLog()::error ");
			pl.error("logger::Logger:: addLog()::error ");
			pl.trace("logger::Logger:: addLog()::error ");
			e.printStackTrace();
		}
	}
	
	public static void main(String args[])
	{
		Logger log = new Logger();
		log.addLog();
	}
}
